package com.kinghood.authoritycenter.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.kinghood.authoritycenter.common.model.dao.auth.UserBaseDO;
import com.kinghood.authoritycenter.common.model.dto.auth.RegisterReqDTO;
import com.kinghood.authoritycenter.common.model.dto.organization.AddUserReqDTO;
import com.kinghood.authoritycenter.common.model.dto.organization.OrganizationQueryReqDTO;
import com.kinghood.authoritycenter.common.model.dto.organization.UpdateUserReqDTO;
import com.kinghood.authoritycenter.common.model.vo.organization.GetUserVO;
import com.kinghood.authoritycenter.common.model.vo.organization.OrganizationUserQueryVO;
import com.kinghood.authoritycenter.common.model.dto.authority.AuthByUserDTO;
import com.kinghood.authoritycenter.common.model.dto.auth.UserDTO;
import com.kinghood.infrastructure.api.authority.UserRemoteVo;
import com.kinghood.sharding.model.PageResponseVO;
import org.springframework.validation.annotation.Validated;

import javax.validation.Valid;
import java.util.List;
import java.util.Map;


/**
 * <p>
 * 用户信息表 服务类
 * </p>
 *
 * @author KingHood
 * @since 2023-12-13
 */
@Validated
public interface IUserBaseService extends IService<UserBaseDO> {

    /**
     * 用户分页
     *
     * @param in 筛选条件
     * @return 用户
     * @author zfj
     * @date 2023/12/18
     */
    PageResponseVO<OrganizationUserQueryVO> queryUserPage(OrganizationQueryReqDTO in);

    /**
     * 用户注册
     *
     * @param in 注册信息
     * @return 用户信息
     * @author zfj
     * @date 2023/12/13
     */
    UserBaseDO register(RegisterReqDTO in);

    /**
     * 检查登录
     *
     * @param userName 账号
     * @param password 密码
     * @return 用户信息
     * @author zfj
     * @date 2023/12/6
     */
    UserDTO checkLogin(String userName, String password);

    /**
     * 通过账号获取用户信息
     *
     * @param userName 账号
     * @return 用户详情
     * @author zfj
     * @date 2024/1/8
     */
    UserBaseDO getUserBaseDO(String userName);

    /**
     * 新增人员
     *
     * @param in 人员信息
     * @return 人员信息
     * @author zfj
     * @date 2023/12/18
     */
    UserBaseDO addUser(@Valid AddUserReqDTO in);

    /**
     * 人员信息获取
     *
     * @param userId 人员id
     * @return 人员信息
     * @author zfj
     * @date 2023/12/18
     */
    GetUserVO getUser(Long userId);

    /**
     * 人员信息修改
     *
     * @param in 人员信息修改
     * @return 人员信息修改
     * @author zfj
     * @date 2023/12/18
     */
    UserBaseDO updateUser(@Valid UpdateUserReqDTO in);

    /**
     * 人员删除
     *
     * @param idList 人员id
     * @return 人员信息修改
     * @author zfj
     * @date 2023/12/18
     */
    Boolean deleteUser(List<Long> idList);

    /**
     * <p>下拉列</p>
     * 获取人员
     *
     * @param in 入参
     * @return 人员
     * @author zfj
     * @date 2023/12/19
     */
    List<UserBaseDO> getList(String in);

    /**
     * 获取账号的权限
     *
     * @param userId 账号id
     * @return 权限
     * @author zfj
     * @date 2023/12/22
     */
    AuthByUserDTO getAuth(Long userId);

    /**
     * 按ID获取用户
     *
     * @param ids ids
     * @author jp
     * @date 2024/01/05
     */
    Map<Long, UserRemoteVo> getUserByIds(List<Long> ids);

    /**
     * 按姓名或帐户获取id列表
     *
     * @param key 钥匙
     * @return @return {@link List }<{@link Long }>
     * @author jp
     * @date 2024/01/10 17:17
     */
    List<Long> getIdListByNameOrAccount(String key);

    /**
     * 用户菜单列表
     *
     * @param userId 用户id
     * @return @return {@link List }
     * @author jp
     * @date 2024/01/15 14:10
     */
    List<String> userMenuList(Long userId);
}
